<?php

namespace App\Api\Controllers\V1;

use App\Api\Transformers\MemberTransformer;
use App\MembersModel;
//如果用了Requests做验证，需要将原本request里的use Illuminate\Foundation\Http\FormRequest 换成 use Dingo\Api\Http\FormRequest;不然的话不能明确的显示验证错误的消息。
//use Dingo\Api\Http\FormRequest;

class MemberController extends BaseController {

    /**
     * 测试响应的方法
     * @param null $_id
     * @return \Dingo\Api\Http\Response
     */
    public function demo($_id = NULL){
        $data = ['asdf',3,4,3,'34',$_id];
        //return $data;

        //MembersModel 对象实现了 Illuminate\Support\Contracts\ArrayableInterface 接口，可以直接返回Members；
        //return MembersModel::all();

        //同样的, 你可以返回一个单一的member。
        //return MembersModel::find($_id);

        // 一个自定义消息和状态码的普通错误。
        //return $this->response->error('This is an error.', 404);

        // 一个没有找到资源的错误，第一个参数可以传递自定义消息。 404
        //return $this->response->errorNotFound('一个没有找到资源的错误');

        // 一个 bad request 错误，第一个参数可以传递自定义消息。 400
        //return $this->response->errorBadRequest('一个 bad request 错误');

        // 一个服务器拒绝错误，第一个参数可以传递自定义消息。403
        //return $this->response->errorForbidden('一个服务器拒绝错误');

        // 一个内部错误，第一个参数可以传递自定义消息。500
        //return $this->response->errorInternal('一个内部错误');

        // 一个未认证错误，第一个参数可以传递自定义消息。401
        //return $this->response->errorUnauthorized('一个未认证错误');

        //创建了资源的响应 201
        //return $this->response->created();

        //无内容响应 204
        //return $this->response->noContent();

        //响应一个数组
        //return $this->response->array($data);


        //响应元素集合
        //$members = MembersModel::all();
        //return $this->response->collection($members,new MemberTransformer());

        //响应一个元素
        //$member = MembersModel::find($_id);
        //return $this->response->item($member,new MemberTransformer());

        //分页响应
        //$members = MembersModel::paginate(5);
        //return $this->response->paginator($members, new MemberTransformer);

        //获取格式化后的路由地址
        return app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('members.find',$_id);
    }

    /**
     * 查询
     * @param $_id
     * @return \Dingo\Api\Http\Response
     */
    public function find($_id = NULL){
        if (!empty($_id)){
            //响应一个元素
            $member = MembersModel::find($_id);//todo 如果没有查询到数据，响应一个404
            return $this->response->item($member,new MemberTransformer());
        }else{
            $members = MembersModel::where('name', 'tom')->orderBy('name', 'desc')->paginate(5);
            //分页响应
            return $this->response->paginator($members,new MemberTransformer());
        }
    }

    /**
     * 插入
     */
    public function save(){
        $Member = new MembersModel();
        $Member->name = 'Member Name';
        $Member->save();
        //创建了资源的响应
        return $this->response->created();
    }

    /**
     * 更新
     */
    public function update($_id = NULL){
        if (!empty($_id)){
            $Member = MembersModel::find($_id);//todo 如果更新的对象不存在，应该响应没有找到资源
            //todo 需要处理没有找到资源时的响应 return $this->response->noContent();
            $Member->name = 'New Member Name';
            $Member->save();//查询出模型后，更新。
        }else{
            //todo 处理参数错误的响应
            MembersModel::where('name', 'tom')->update(['delayed' => 1]);//按条件批量更新
            //todo 需要处理没有找到资源时的响应
        }
    }

    /**
     * 删除
     * @param $_id
     */
    public function delete($_id = NULL){
        if (!empty($_id)){
            $member = MembersModel::find($_id);
            $member->delete();//todo 注意处理删除失败的情况
        }else{//todo 按条件删除多个资源时的处理
            /*MembersModel::destroy(1);
            MembersModel::destroy([1, 2, 3]);
            MembersModel::destroy(1, 2, 3);*/
        }
    }

}